﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entities;
using Entities.IRepository;
using DAL;
using BLL;

namespace HeThongNhaSach
{
	public partial class frmCapNhatSB : Form
	{
		public frmMain frmChinh = new frmMain();
		private Sach _Sach;
		private Bao _Bao;
		private TapChi _TapChi;
		private IGeneralRepository<TheLoai> _TheLoaiRP;
		private ISachBaoRepository _SachBaoRP;
		private QLSachBao _SBManager;
		public SachBao sb;
		public frmCapNhatSB()
		{
			InitializeComponent();
			cboLoaiBao.Items.Add("Nhật Báo");
			cboLoaiBao.Items.Add("Tuần Báo");
			cboLoaiBao.Items.Add("Nguyệt San");
			cboLoaiBao.DisplayMember = "TenTL";
			
			
		}
		
		private void grbChucNangThem_Click(object sender, EventArgs e)
		{

		}
		public void loai()
		{
            if (rdSach.Checked)
            {
                grbSach.Enabled = true;
                grbBao.Enabled = false;
            }
            else
                if (rdBao.Checked)
                {
                    grbSach.Enabled = false;
                    grbBao.Enabled = true;
                }
                else
                    if (rdTapChi.Checked)
                    {
                        grbSach.Enabled = false;
                        grbBao.Enabled = false;
                    }
        
			
		}
		private void frmCapNhatSB_Load(object sender, EventArgs e)
		{
			_SachBaoRP = new SachBaoRepository();
			_SBManager = new QLSachBao(_SachBaoRP);
			try
			{
				txtMaSB.Text = sb.MaSachBao;
				txtTenSB.Text = sb.TenSachBao;
				dtpNgayXB.Value = sb.NgayXuatBan;
				txtNhaXB.Text = sb.NhaXuatBan;
				txtSoLuong.Text = sb.SoLuong.ToString();
				txtGiaBan.Text = sb.GiaBan.ToString();
				txtGiaMua.Text = sb.GiaMua.ToString();
				if (sb is Sach)
				{
					rdSach.Checked = true;
					Sach s = _SachBaoRP.TimSachTheoMa(sb.MaSachBao);
					txtTacGia.Text = s.TacGia;
					txtLanTaiBan.Text = s.SoLanTaiBan.ToString();
					//cboTheLoai.Text = s.TheLoai;
				}
				if (sb is Bao)
				{
					rdBao.Checked = true;
					Bao s = _SachBaoRP.TimBaoTheoMa(sb.MaSachBao);
					cboLoaiBao.Text = s.LoaiBao.Trim();
				}
				if (sb is TapChi)
				{
					rdTapChi.Checked = true;
				}
                loai();
			}
			catch
			{ }
			
			
		}
		

		

		private void btnDong_Click(object sender, EventArgs e)
		{
			this.Close();
		}
        private string TaoMaSB()
        {
            List<SachBao> l = _SachBaoRP.LayTatCa().ToList().FindAll(delegate(SachBao sb)
            {
                if (rdSach.Checked)
                {
                    return sb is Sach;
                }
                else
                    if (rdBao.Checked)
                    {
                        return sb is Bao;
                    }
                    else
                        return sb is TapChi;
                
            });
            int stt = 0;
            if (l.Count > 0)
            {
                stt = int.Parse(l[0].MaSachBao.Substring(6, 2));
                foreach (SachBao hd in l)
                {
                    int ma = int.Parse(hd.MaSachBao.Substring(6, 4));
                    if (ma > stt)
                        stt = ma;
                }
            }
            return (stt + 1).ToString().PadLeft(8, '0');
        }

		private void btnThem_Click(object sender, EventArgs e)
		{
			if (rdSach.Checked)
			{
				_Sach = new Sach();
				_Sach.MaSachBao = "SA" + TaoMaSB();
				_Sach.TenSachBao = txtTenSB.Text;
				_Sach.SoLuong = int.Parse(txtSoLuong.Text);
				_Sach.NhaXuatBan = txtNhaXB.Text;
				_Sach.NgayXuatBan = dtpNgayXB.Value;

				try
				{
					_Sach.GiaBan = float.Parse(txtGiaBan.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}
				try
				{
					_Sach.GiaMua = float.Parse(txtGiaMua.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá mua");
				}
				_Sach.TacGia = txtTacGia.Text;
				_Sach.SoLanTaiBan = int.Parse(txtLanTaiBan.Text);

				var vResult = _SBManager.Validate(_Sach);
				if (vResult.Valid)
				{
					var aResult = _SBManager.ThemSach(_Sach);
					if (aResult.Success)
					{
						DialogResult = DialogResult.OK;
					}
					else
						MessageBox.Show(aResult.GetErrorMessages());
				}
				else MessageBox.Show(vResult.ToString());
			}
			if (rdBao.Checked)
			{
				_Bao = new Bao();
				_Bao.MaSachBao = "BA" + TaoMaSB();
				_Bao.TenSachBao = txtTenSB.Text;
				_Bao.NhaXuatBan = txtNhaXB.Text;
				_Bao.NgayXuatBan = dtpNgayXB.Value;
				_Bao.SoLuong = int.Parse(txtSoLuong.Text);

				try
				{
					_Bao.GiaBan = float.Parse(txtGiaBan.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}
				try
				{
					_Bao.GiaMua = float.Parse(txtGiaMua.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}
				_Bao.LoaiBao = cboLoaiBao.Text;

				var vResult = _SBManager.Validate(_Bao);
				if (vResult.Valid)
				{
					var aResult = _SBManager.ThemBao(_Bao);
					if (aResult.Success)
					{
						DialogResult = DialogResult.OK;
						//	_SachBaoRP.Insert();
					}
					else
						MessageBox.Show(aResult.GetErrorMessages());
				}
				else MessageBox.Show(vResult.ToString());
			}
			if (rdTapChi.Checked)
			{
				_TapChi = new TapChi();
				_TapChi.MaSachBao = "TC" + TaoMaSB();
				_TapChi.TenSachBao = txtTenSB.Text;
				_TapChi.NhaXuatBan = txtNhaXB.Text;
				_TapChi.NgayXuatBan = dtpNgayXB.Value;
				_TapChi.SoLuong = int.Parse(txtSoLuong.Text);

				try
				{
					_TapChi.GiaBan = float.Parse(txtGiaBan.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}
				try
				{
					_TapChi.GiaMua = float.Parse(txtGiaMua.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}

				var vResult = _SBManager.Validate(_TapChi);
				if (vResult.Valid)
				{
					var aResult = _SBManager.ThemTapChi(_TapChi);
					if (aResult.Success)
					{
						DialogResult = DialogResult.OK;
					}
					else
						MessageBox.Show(aResult.GetErrorMessages());
				}
				else MessageBox.Show(vResult.ToString());
			}
			frmChinh.LoadSachBao();
		}

		private void btnSua_Click(object sender, EventArgs e)
		{
			if (rdSach.Checked)
			{
               
				if (_SachBaoRP.TimSachTheoMa(txtMaSB.Text) == null)
				{
					MessageBox.Show("Không tìm thấy mã sách báo cần sửa");
					return;
				}
				_Sach = new Sach();
				_Sach.MaSachBao = txtMaSB.Text;
				_Sach.TenSachBao = txtTenSB.Text;
				_Sach.NhaXuatBan = txtNhaXB.Text;
				_Sach.NgayXuatBan = dtpNgayXB.Value;
				_Sach.SoLuong = int.Parse(txtSoLuong.Text);
				try
				{
					_Sach.GiaBan = float.Parse(txtGiaBan.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}
				try
				{
					_Sach.GiaMua = float.Parse(txtGiaMua.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá mua");
				}
				_Sach.TacGia = txtTacGia.Text;
				
				_Sach.SoLanTaiBan = int.Parse(txtLanTaiBan.Text);

				var vResult = _SBManager.Validate(_Sach);
				if (vResult.Valid)
				{
					var aResult = _SBManager.SuaThongTinSach(_Sach);
					if (aResult.Success)
					{
						DialogResult = DialogResult.OK;
					}
					else
						MessageBox.Show(aResult.GetErrorMessages());
				}
				else MessageBox.Show(vResult.ToString());
			}
			if (rdBao.Checked)
			{
				if (_SachBaoRP.TimBaoTheoMa(txtMaSB.Text) == null)
				{
					MessageBox.Show("Không tìm thấy mã sách báo cần sửa");
					return;
				}
				_Bao = new Bao();

				_Bao.MaSachBao = TaoMaSB();
				_Bao.TenSachBao = txtTenSB.Text;
				_Bao.NhaXuatBan = txtNhaXB.Text;
				_Bao.NgayXuatBan = dtpNgayXB.Value;
				_Bao.SoLuong = int.Parse(txtSoLuong.Text);
				try
				{
					_Bao.GiaBan = float.Parse(txtGiaBan.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}
				try
				{
					_Bao.GiaMua = float.Parse(txtGiaMua.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá mua");
				}
				_Bao.LoaiBao = cboLoaiBao.Text;

				var vResult = _SBManager.Validate(_Bao);
				if (vResult.Valid)
				{
					var aResult = _SBManager.SuaThongTinBao(_Bao);
					if (aResult.Success)
					{
						DialogResult = DialogResult.OK;
					}
					else
						MessageBox.Show(aResult.GetErrorMessages());
				}
				else MessageBox.Show(vResult.ToString());
			}
			if (rdTapChi.Checked)
			{
				if (_SachBaoRP.TimTapChiTheoMa(txtMaSB.Text) == null)
				{
					MessageBox.Show("Không tìm thấy mã sách báo cần sửa");
					return;
				}
				_TapChi = new TapChi();
				_TapChi.MaSachBao = txtMaSB.Text;
				_TapChi.TenSachBao = txtTenSB.Text;
				_TapChi.NhaXuatBan = txtNhaXB.Text;
				_TapChi.NgayXuatBan = dtpNgayXB.Value;
				_TapChi.SoLuong = int.Parse(txtSoLuong.Text);
				try
				{
					_TapChi.GiaBan = float.Parse(txtGiaBan.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá bán");
				}
				try
				{
					_TapChi.GiaMua = float.Parse(txtGiaMua.Text);
				}
				catch
				{
					MessageBox.Show("Nhập lại giá mua");
				}

				var vResult = _SBManager.Validate(_TapChi);
				if (vResult.Valid)
				{
					var aResult = _SBManager.SuaThongTinTapChi(_TapChi);
					if (aResult.Success)
					{
						DialogResult = DialogResult.OK;
					}
					else
						MessageBox.Show(aResult.GetErrorMessages());
				}
				else MessageBox.Show(vResult.ToString());
			}
			frmChinh.LoadSachBao();
		}

		private void btnLamMoi_Click(object sender, EventArgs e)
		{
			txtMaSB.Text = null;
			txtTenSB.Text = null;
			txtTacGia.Text = null;
			txtNhaXB.Text = null;
			txtGiaMua.Text = null;
			txtGiaBan.Text = null;
			cboLoaiBao.SelectedIndex = 0;
			//cboTheLoai.Text = null;
			txtSoLuong.Text = null;
			dtpNgayXB.Text = null;
			txtLanTaiBan.Text = null;
			
		}

		private void grbLoai_Click(object sender, EventArgs e)
		{
			
		}

        private void rdSach_CheckedChanged(object sender, EventArgs e)
        {
            loai();
        }
		
	}
}
